package com.masterlu.module.product.service.comment;

import com.masterlu.framework.common.pojo.PageResult;
import com.masterlu.module.product.api.comment.dto.ProductCommentCreateReqDTO;
import com.masterlu.module.product.controller.admin.comment.vo.*;
import com.masterlu.module.product.controller.app.comment.vo.AppCommentPageReqVO;
import com.masterlu.module.product.controller.app.comment.vo.AppProductCommentRespVO;
import com.masterlu.module.product.dal.dataobject.comment.ProductCommentDO;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import java.util.List;

/**
 * 商品评论 Service 接口
 *
 * @author wangzhs
 */
@Service
@Validated
public interface ProductCommentService {

    /**
     * 创建商品评论
     * 后台管理员创建评论使用
     *
     * @param createReqVO 商品评价创建 Request VO 对象
     */
    void createComment(ProductCommentCreateReqVO createReqVO);

    /**
     * 创建评论
     * 创建商品评论 APP 端创建商品评论使用
     *
     * @param createReqDTO 创建请求 dto
     * @return 返回评论 id
     */
    Long createComment(ProductCommentCreateReqDTO createReqDTO);

    /**
     * 修改评论是否可见
     *
     * @param updateReqVO 修改评论可见
     */
    void updateCommentVisible(ProductCommentUpdateVisibleReqVO updateReqVO);

    /**
     * 商家回复
     *
     * @param replyVO     商家回复
     * @param userId 管理后台商家登陆人 ID
     */
    void replyComment(ProductCommentReplyReqVO replyVO, Long userId);

    /**
     * 【管理员】获得商品评价分页
     *
     * @param pageReqVO 分页查询
     * @return 商品评价分页
     */
    PageResult<ProductCommentDO> getCommentPage(ProductCommentPageReqVO pageReqVO);
    /**
     * 【管理员】获得商品评价分页
     *
     * @param questionId 试题回复  不分页
     * @return  试题回复列表
     */
    public List<ProductCommentDO> getCommentList(Long userId,Long questionId);

    /**
     * 【管理员】获得商品评价分页
     *
     * @param questionId 试题回复  不分页
     * @return  试题回复列表
     */
    public List<AppProductCommentRespVO> getCommentsWithLikedStatus(Long userId,Long questionId);
    /**
     * 【会员】获得商品评价分页
     *
     * @param pageVO  分页查询
     * @param visible 是否可见
     * @return 商品评价分页
     */
    PageResult<ProductCommentDO> getCommentPage(AppCommentPageReqVO pageVO, Boolean visible);
    /**
     * 修改评论是否可见
     *
     * @param updateReqVO 修改评论可见
     */
    void updateCommentScores(ProductCommentUpdateScoresReqVO updateReqVO);
    /**
     * 创建试题评论
     *
     * @param userId 用户编号
     * @param spuId SPU 编号
     * @param content 评论内容
     */
    Long createQuestionComment(Long userId, Long spuId,String content);
}
